/*


*/

#include <vector>
#include <string>
#include <cstring>
#include <cstdio>
#include <map>
#include <set>
#include <climits>
#include <algorithm>
#include <queue>
#include <cmath>
#include <iostream>
#include <ctime>
#include <tr1/unordered_map>
typedef long long LL;
using namespace std;
using namespace std::tr1;
const LL INF = 1e18;

struct CData {
    int v;
    operator int() {
		return v;
	}
    CData(int x):v(x){}
};

int tt(int p) {
	return 123;
}
struct CDataHash {
	size_t operator () (const CData &x) const {
		puts("123123");
		return x.v;
	}
};
struct CDataCmp {
	bool operator () (const CData &a, const CData &b) const {
		int aa, bb;
		printf("%d,%d\n", a, b);
		return a.v == b.v;
	}
	void operator () (CData x) {
		//CData pp(123);
    	//int ccc = pp;
		printf("!!!!!%d!!!!!", int(x));
	}
	operator int () {
		return 223;
	}
};

template <typename T1, typename T2>
	void proc(T1 a, T2 pa) {
		pa(a);
	}

struct CProblem {
    void printAns(LL n) {
    	//printf("%b\n", 11230);
    	unordered_map<CData, int, CDataHash, CDataCmp> mp;
    	mp[CData(1)] = 1;
    	mp[CData(2)] = 2;
    	mp[CData(3)] = 3;
    	mp[CData(4)] = 4;
    	CDataCmp cmp;
    	double xx = cmp;
    	proc(CData(5), cmp);
    	printf("??%f\n", xx);
    	CData pp(123);
    	int ccc = pp;
    	printf("?-?%d\n", int(CData(11)));
       // mySort(best, cmp) ;
    }
};
int main() {
	static CProblem cp;
#ifdef DEBUG
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
   cp.printAns(11111111111L);
   return 0;
   // for(int i = 0; i < 10000; ++i) cp.printAns(11111111111L);
#endif

    LL n;
    while(scanf("%lld", &n)!=EOF) {
        cp.printAns(n);
    }
    return 0;
}
